package d3_method_reference;

import java.util.Arrays;
import java.util.Comparator;

public class Test03 {
    public static void main(String[] args) {
        //目标: 特定类型的方法引用
        String emoji = "😊";
        String[] names = {"dlei", "Angela", "baby", "caocao",
                "Coach", "曹操", "deby",
                "eason", "andy"};
//只要字符在Unicode标准定义范围内,Java就会使用Unicode处理它, 但具体事项方式会根据字符所在的Unicode平面(Plane)有所不同
//Unicode兼容了基本的ASCII码表的值
//场景:对他们进行排序(默认按照首字母进行排序)-->
// 如果直接调用Arrays.sort(names);会直接按照首字母在Unicode码表中的值大小进行排序
//拓展:(忽略大小写排序)--->的自己定义排序规则
        Arrays.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //自己写排序逻辑基本是不可能的,算法过于复杂

                return o1.compareToIgnoreCase(o2);
            }
        });

        //开始Lambda简化
        Arrays.sort(names, (o1, o2) ->
                //自己写排序逻辑基本是不可能的,算法过于复杂
                o1.compareToIgnoreCase(o2)
        );

//特定类型方法引用:
//类型::方法
//规则:如果某个Lambda表达式里面只是调用一个实例方法, 并且前面参数列表中的第一个参数作为方法的主调,后面的所有参数
//都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用
        Arrays.sort(names,
                //自己写排序逻辑基本是不可能的,算法过于复杂
                String::compareToIgnoreCase);
    }
}
